package jwt

import (
	"iris-wms/common/model"
	"iris-wms/common/tools"
	"iris-wms/common/tools/consts"

	"github.com/kataras/iris/v12"
	"github.com/kataras/iris/v12/middleware/jwt"
)

// Serve the middleware's action
func ServeHTTP(ctx iris.Context) (err error) {
	// exact header token
	token := jwt.FromHeader(ctx)
	if token == "" {
		ctx.StopWithError(iris.StatusUnauthorized, jwt.ErrMissing)
		return
	}

	vToken, err := jwt.Verify(jwt.HS256, []byte(tools.GConfig.App.JWT.JWTSecret), []byte(token))
	if err != nil {
		return err
	}

	claims := model.AdminUser{}
	if err = vToken.Claims(&claims); err != nil {
		return err
	}

	// verify
	// TODO
	// standardClaims := jwt.GetVerifiedToken(ctx).StandardClaims
	// expiresAtString := standardClaims.ExpiresAt().Format(ctx.Application().ConfigurationReadOnly().GetTimeFormat())
	// timeLeft := standardClaims.Timeleft()

	// token缓存
	// TODO 缓存到redis
	ctx.Values().Set(consts.UID, claims.ID)
	ctx.Values().Set(consts.USER, claims)
	return nil
}
